Systems and methods for storing content items in secondary storage

ABSTRACT

Examples described herein relate to systems and methods for storing content items. The methods may be implemented by a computer comprising a processor, primary storage device, secondary storage, device and network interface. The primary storage device may receive, via the network interface, a plurality of content items responsive to respective requests from clients. The plurality of content items may be distributed, via the network interface, from the primary storage device to clients responsive to the respective requests from the clients. The processor may generate a dynamic priority list for the content items based on the respective requests from the clients over time, and may write, based on the dynamic priority list, only a subset of the content items to the secondary storage device.

BACKGROUND

A content delivery system or network (e.g., a content delivery network(CDN)) is a geographically distributed network of servers configured forfacilitating an origin server to distribute content items (e.g., videos,images, website content data, and so on) of the origin server to clientsthat consume the content items. Each server in the content deliverysystem can be referred to as a node, a machine, and so on. To distributethe content items from the origin server to clients that aregeographically remote to the origin server, a node in geographicalproximity to the clients can provide the content items to those clientson behalf of the origin server. In particular, the CDN can replicate andcache the content items of the origin server and provide the replicatedand cached content items to the clients. The respective caches of nodeson the CDN can include primary storage, such as a memory cache in randomaccess memory (RAM), and secondary storage, such as a mass storagedevice.

BRIEF SUMMARY

Provided herein are systems, apparatuses, and methods for storingcontent items in secondary storage.

In some configurations, a method for storing content items is provided.The method may be implemented by a computer comprising a processor, aprimary storage device, a secondary storage device, and a networkinterface. The method may include receiving, by the primary storagedevice via the network interface, a plurality of content itemsresponsive to respective requests from clients. The method also mayinclude distributing, via the network interface, the plurality ofcontent items from the primary storage device to clients responsive tothe respective requests from the clients. The method also may includegenerating, by the processor, a dynamic priority list for the contentitems based on the respective requests from the clients over time. Themethod also may include writing, by the processor based on the dynamicpriority list, only a subset of the content items to the secondarystorage device.

Additionally or alternatively, optionally the primary storage deviceincludes a memory cache. Optionally, the secondary storage deviceincludes a mass storage device.

Additionally or alternatively, optionally the primary storage devicereceives content items at a first rate. The secondary storage deviceoptionally receives content items at a second rate that is significantlylower than the first rate.

In some configurations, the method optionally further includes, by theprocessor, deleting content items from the primary storage deviceresponsive to the respective requests from the clients.

Additionally or alternatively, optionally the processor generates thedynamic priority list based on frequencies at which the clientsrespectively request the content items. Additionally or alternatively,optionally the processor generates the dynamic priority list based onnumbers of times with which the clients respectively request the contentitems. Additionally or alternatively, optionally the processor generatesthe dynamic priority list based on changes in rates at which the clientsrespectively request the content items. Additionally or alternatively,optionally the processor generates the dynamic priority list based onrespective costs of receiving the content items via the networkinterface. Additionally or alternatively, optionally the processorgenerates the dynamic priority list based on respective costs of writingthe content items to the primary storage device. Additionally oralternatively, optionally the processor generates the dynamic prioritylist based on respective costs of writing the content items to thesecondary storage device.

In some configurations, the computer optionally comprises a node of acontent delivery network. Additionally or alternatively, optionally theprocessor receives the respective requests from the clients anddistributes the plurality of content items to the clients responsive tosuch requests.

Additionally or alternatively, optionally the processor writes thesubset of the content items from the primary storage device to thesecondary storage device.

Additionally or alternatively, optionally the processor writes thesubset of the content items from the network interface to the secondarystorage device. As a further option, the processor generates the dynamicpriority list based on whether the respective content items areavailable in the primary storage device.

In some configurations, a method for storing data items is provided. Themethod may be implemented by a computer that includes a processor, amemory cache, and a mass storage device. The method may includereceiving the data items by the memory cache; generating, by theprocessor, a respective worthiness value of each of the data items; andwriting, by the processor, only a subset of the data items from thememory cache into the mass storage device based on the respectiveworthiness values.

In some configurations, a computer system is provided that includes aprocessor, a primary storage device, a secondary storage device, and anetwork interface. The processor may be configured to implementoperations that include receiving, by the primary storage device via thenetwork interface, a plurality of content items responsive to respectiverequests from clients. The operations further may include distributing,via the network interface, the plurality of content items from theprimary storage device to clients responsive to the respective requestsfrom the clients. The operations further may include generating, by theprocessor, a dynamic priority list for the content items based on therespective requests from the clients over time. The operations furthermay include writing, by the processor based on the dynamic prioritylist, only a subset of the content items to the secondary storagedevice.

In some configurations, a computer system is provided that includes aprocessor, a memory cache, and a mass storage device. The processor maybe configured to implement operations that include receiving the dataitems by the memory cache; generating, by the processor, a respectiveworthiness value of each of the data items; and writing, by theprocessor, only a subset of the data items from the memory cache intothe mass storage device based on the respective worthiness values.

These and other features, together with the organization and manner ofoperation thereof, will become apparent from the following detaileddescription when taken in conjunction with the accompanying drawings.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a diagram of a content delivery system according to someembodiments.

FIG. 2 is a block diagram that illustrates a node according to someembodiments of the present disclosure.

FIG. 3 is a flow diagram illustrating a method for storing content itemsin secondary storage according to various embodiments.

FIG. 4 is a flow diagram illustrating a method for storing data items ina mass storage device according to various embodiments.

DETAILED DESCRIPTION

Embodiments described herein relate to systems and methods for storingcontent items in a secondary storage. Although certain examples providedherein describe the secondary storage of such content items inassociation with a content delivery system (e.g., a CDN), it should beappreciated that the present systems and methods may be implemented inany suitable computing environment and are not limited to contentdelivery systems such as CDNs. In a content delivery system, an edgenode is a node that initially receives a request for one or more contentitems from a client. The client refers to a device operated by an enduser who desires to consume or otherwise receive one or more of thecontent items provided by the origin server. The content item is orincludes a portion, a segment, an object, a file, or a slice of datastored by the origin server and cached throughout the content deliverysystem for provisioning to one or more of the clients. The origin serverrefers to a device operated by a customer of the content deliverysystem, which facilitates the customer in delivering the content itemsto respective clients.

In some implementations provided herein, a computer system (for examplea node, such as an edge node) includes a processor, a network interface,and both a primary storage device and a secondary storage device whichrespectively and independently may store content items received via thenetwork interface. For example, the primary storage device may receivecontent items via the network interface responsive to respectiverequests from clients. Those content items then may be transmitted fromthe primary storage device to the respective clients via the networkinterface. In implementations such as provided herein, the secondarystorage device may be or include a mass storage device thatindependently stores only a subset of the content items that arerespectively requested by clients, for example based on one or more ofany of a suitable number of criteria such as described herein. Theprimary storage device may temporarily store content items for immediatedistribution responsive to client requests, whereas the secondarystorage device may provide longer-term storage of only a subset of thecontent items for future distribution, e.g., responsive to clientrequests that may be received in the future. As provided herein, theprocessor may evaluate the respective “worthiness” of respective contentitems, and independently may write to the secondary storage only thosecontent items which the processor deems to be most worthy at the time,e.g., the most likely to be requested again in the future, or satisfyingone or more other criteria such as described in greater detail herein.As such, the primary and secondary storage devices may be considered tobe “decoupled” from one another. Such independence of the secondarystorage device from the primary storage device may provide significantcomputational efficiencies as compared to previously known arrangements.

For example, in previously known computer systems including both primaryand secondary storage devices, the processor may be configured toautomatically write every received content item first to the primarystorage device (e.g., memory cache) and from there also to the secondarystorage device (e.g., mass storage device). However, the presentinventor has recognized that such an arrangement may lead to significantcomputational inefficiencies. For example, it may be relativelycomputationally efficient to write each content item received via thenetwork device into the primary storage device (e.g., memory cache),because the primary storage device may be such that the processor mayrepeatedly write received content items thereto and read content itemstherefrom relatively quickly. For example, the processor may be able torepeatedly write content items to the primary storage device at a ratethat at least as fast as the network interface via which the contentitems are received, without degrading the primary storage device.

The present inventor has recognized that also writing each receivedcontent item to the secondary storage device may cause computationalinefficiencies and may delay the client's receipt of the respectivelyrequested content item. For example, the secondary storage device may besuch that the processor may write received content items theretorelatively slowly as compared to the rate at which it may write suchcontent items to the primary storage device. Illustratively, presentlyavailable secondary storage devices such as spinning hard disk drives(HDDs) or solid state drives (SSDs) may have write speeds that at leastan order of magnitude slower than the write speeds of primary storagedevices such as memory cache. Additionally, repeated overwriteoperations may degrade HDDs or SSDs over time, resulting in performancedegradations over time and potentially the need for frequent and costlyreplacements. In previously known systems, if the stream of requestedcontent items would be received into the primary storage device at arate which exceeds the rate at which those content items may be writtento the secondary storage device, the processor may intentionally reducethe rate at which the requested content is received to a level at whichthe secondary storage device may keep up with that stream. This maydelay the clients' receipt of respective content items. Furthermore,previously known systems may write into the secondary storage devicesome content items which are unlikely to be requested again, which maywaste computational resources and make degradation of the secondarystorage device, due to the multiple write processes, all the morewasteful.

In comparison, in configurations provided herein, writing only a subsetof the requested content items into the secondary storage device,independently from writing all of the content items into the primarystorage device, may provide numerous computational efficiencies and mayincrease the speed with which clients may receive their requestedcontent items as compared to previously known systems. For example, byreducing the number of received content items that are written to thesecondary storage device from all (as previously known) to a subset (asprovided herein), the processor need not necessarily reduce the rate atwhich requested content is received in order for the secondary storagedevice to keep up with the stream. As another example, reducing thenumber of content items that are written to the secondary storage devicemay reduce the rate at which the secondary storage device isoverwritten, resulting in a lower rate of degradation and less need toreplace the secondary storage device. Still further, the subset ofcontent items that is written to the secondary storage device may beselected based on their apparent “worthiness” for long-term storage,meaning that computational resources need not be wasted on storingstorage items that may, for example, be unlikely to be requested againby a client.

FIG. 1 is a diagram of a content delivery system 100 according to someembodiments. Referring to FIG. 1 , the content delivery system 100 isconfigured for delivering content items provided by an origin server 150to various clients 102 a-102 n. As shown, each of the users 101 a-101 noperates or is associated with a respective one of the clients 102 a-102n for requesting and receiving the content items provided by the originserver 150 via node(s) 140, 110. In some embodiments, each of theclients 102 a-102 n can be a desktop computer, mainframe computer,laptop computer, pad device, smart phone device, or the like, configuredwith hardware and software to perform operations described herein. Forexample, each of the clients 102 a-102 n includes at least a processingcircuit, a network device, and a user interface. The processing circuitis configured to perform functions of the clients 102 a-102 n describedherein. The network device is configured to connect the clients 102a-102 n to a node (e.g., an edge node 110) of the content deliverysystem 100. The user interface is configured for outputting (e.g.,displaying media content, games, information, and so on) based on thecontent items as well as receiving user input from the users 101 a-101n. Any suitable node or node(s) within content delivery system 100 maybe configured to implement functionality for storing a subset of contentitems in secondary storage, such as provided herein. However, it shouldbe appreciated that such functionality suitably may be implemented onany computing system, and is not limited to implementation on a node ina content delivery system.

In some examples, the content delivery system 100 corresponds to a CDNfor delivering and distributing the content items originating from theorigin server 150 to the clients 102 a-102 n. For example, the contentdelivery system 100 includes nodes 110, 140, . . . , and 150, where theorigin server 150 is connected to at least one node (not shown), one ofthe at least one node is connected to the node 140, and the node 140 isconnected to the edge node 110. The origin server 150, the node 140, theedge node 110, and other nodes in the content delivery system 100 notshown can be located in different locations, thus forming thegeographically distributed content delivery system 100. While there canbe additional nodes between the node 140 and the origin server 150, thenode 140 can be directly connected to the origin server 150, or the node140 can be the origin server 150. In some configurations, one or both ofnode 140 and edge node 110 may be configured to implement the presentfunctionality for storing a subset of content items in secondarystorage.

The content items of the origin server 150 can be replicated and cached(stored in primary or secondary storage, or both) in multiple locations(e.g., multiple nodes) throughout the content delivery system 100,including in the node 140 and other nodes (not shown). As used herein,the node 140 refers to any node in the content delivery system 100(between the origin server 150 and the edge node 110) that stores copiesof content items provided by the origin server 150. The origin server150 refers to the source of the content items. The origin server 150 canbelong to a customer (e.g., a content owner, content publisher, or asubscriber of the system 100) of the content delivery system 100 suchthat the customer pays a fee for using the content delivery system 100to deliver the content items. Examples of content items include, but arenot limited to, webpages and web objects (e.g., text, graphics, scripts,and the like), downloadable objects (e.g., media files, software,documents, and the like), live streaming media, on-demand streamingmedia, social networks, and applications (e.g., online multiplayergames, dating applications, e-commerce applications, portals, and thelike), and so on.

The nodes 110, 140, and other nodes (not shown) between the edge node110 and the origin server 150 form a “backbone” of the content deliverysystem 100, providing a path from the origin server 150 to the clients102 a-102 n. The node 140 is upstream with respect to the edge node 110given that the node 140 is between the edge node 110 and the originserver 150. The nodes making up a backbone may be dynamically orstatically selected based on the location of those nodes, taking intoconsideration a number hops or links from the origin server 150 to theclients 102 a-102 n, latency, availability, cost, and other suitablecriteria. In some embodiments, the edge node 110 is referred to as an“edge node” given the proximity of the edge node 110 to the clients 102a-102 n. For example, the clients 102 a-102 n that are in an area 105may be associated with and connected to the edge node 110 given theproximity of the edge node 110 to the clients 102 a-102 n. In otherwords, the edge nodes 110 is on the edge of the content delivery system100, and the edge node 110 is directly connected to the clients 102a-102 n. Typically, the closer an edge node is to clients connectedthereto, the less latency those clients experience with respect toreceiving the content items from that edge node. Thus, performance iscontingent upon the geographical proximity of the edge node 110 to theclients 102 a-102 n. CDN providers typically place the edge nodes asclose to intended clients as practicable. Thus, the edge node 110 can belocated within the area 105. In some embodiments, the edge node 110 maybe directly connected to the origin server 150.

In some embodiments, the node 140 (and other nodes between the node 140and the origin server 150 not shown) is referred to as an “intermediatenode.” The intermediate nodes link the edge nodes to the origin server150 via various network links or “hops.” The intermediate nodes canprovide the content items (and updates thereof) to the edge nodes. Thatis, the origin server 150 can provide the content items (and updatesthereof) to the edge node 110 through the node 140, if the edge node 110does not currently cache (store in primary or secondary storage) a copyof the content items respectively requested by the clients 102 a-102 n.

Each link between one of the clients 102 a-102 n and the edge node 110corresponds to a suitable network connection for exchanging data, suchas content items. In addition, each link between two of thenodes/servers 110, 140, . . . , and 150 represents a suitable networkconnection for exchanging data. A network connection is structured topermit the exchange of data, values, instructions, messages, and thelike among the clients 102 a-102 n, the nodes 110, 140, and so on, andthe origin server 150 in the manner shown. The network connection can beany suitable Local Area Network (LAN) or Wide Area Network (WAN)connection. For example, each network link can be supported by FrequencyDivision Multiple Access (FDMA), Time Division Multiple Access (TDMA),Synchronous Optical Network (SONET), Dense Wavelength DivisionMultiplexing (DWDM), Optical Transport Network (OTN), Code DivisionMultiple Access (CDMA) (particularly, Evolution-Data Optimized (EVDO)),Universal Mobile Telecommunications Systems (UMTS) (particularly, TimeDivision Synchronous CDMA (TD-SCDMA or TDS) Wideband Code DivisionMultiple Access (WCDMA), Long Term Evolution (LTE), evolved MultimediaBroadcast Multicast Services (eMBMS), High-Speed Downlink Packet Access(HSDPA), and the like), Universal Terrestrial Radio Access (UTRA),Global System for Mobile Communications (GSM), Code Division MultipleAccess 1× Radio Transmission Technology (1×), General Packet RadioService (GPRS), Personal Communications Service (PCS), 802.11X, ZigBee,Bluetooth, Wi-Fi, any suitable wired network, combination thereof,and/or the like.

As shown, the edge node 110 includes a CDN engine 120 that includes anysuitable number of modules configured to perform functions of edge node110. It should be appreciated that any given module may be configured soas to perform a plurality of functions such as provided herein. In thenonlimiting example illustrated in FIG. 1 , CDN engine includes requestservice module 122, caching module 124, and business logic module 132.Request service module 122 may be configured to process requests forcontent (e.g., HTTP requests) received from the clients 102 a-102 n,Caching module 124 may be configured to receive and store at least intoprimary storage 126, and optionally into secondary storage 128, a subsetof the requested content items in case additional clients request thesame content items at a later time. The request service module 122 mayinclude a HTTP service module configured to receive and process HTTPrequests received from the clients 102 a-102 n. The request servicemodule 122 is configured for suitable protocols (e.g., HTTP) forreceiving and processing the HTTP request. In other words, the requestservice module 122 is configured to answer the HTTP requests, forcontent items, from the end users 101 a-101 n in the manner described.In some configurations, caching module 124 includes or is operativelycoupled to primary storage 126 and secondary storage 128. Caching module124 is configured to store received content items in primary storage126, to select only a subset of the content items for storage insecondary storage 128, and to store that subset into secondary storage128 in a manner such as described in greater detail elsewhere herein.

Business logic module 132 may be configured to implement business logicsat the edge node 110, e.g., for authentication, providing businessinformation to caching module 124 for use in maintaining correctstatistics and logs, calculating cache key, and so on. For example, thebusiness logic module 132 is configured to determine whether the contentitems requested by the clients 102 a-102 n belongs to a valid customerof the content delivery system 100, whether the rules of the customerallow the content items to be serviced to the clients 102 a-102 n,whether the rules of the content delivery system 100 allow the contentitems to be serviced to the clients 102 a-102 n, and so on.

Modules within CDN engine 120 may be loosely or tightly coupled, orcoupled to various degrees between those extremes, with the couplingvarying with regard to the specific functions being performed. Forexample, business logic module 132 may require information held withincaching module 124 (including but not limited to popularity data,resource age data, resource size data, recent access pattern data, andthe like) in order to make its decision or decisions, and it thereforemay be tightly coupled with the caching module for those purposes,whereas for other functions, there may be little or no coupling. Nothingin this application should be construed as placing a restriction on or arequirement for any particular degree of coupling between or arrangementof the various disclosed modules mentioned in any of the possibleembodiments described herein.

Other configurations of content delivery system 100 suitably may beimplemented. For example, caching module 124 and business logic module132 may be provided on different nodes than one another, which nodes maybe operatively coupled via a network structured to permit the exchangeof data, values, instructions, messages, and the like. Such network canbe any suitable LAN or WAN connection. For example, the network can besupported by FDMA, TDMA, SONET, DWDM, OTN, CDMA (particularly, EVDO),UMTS (particularly, TD-SCDMA or TDS WCDMA, LTE, eMBMS, HSDPA, and thelike), UTRA, GSM, 1×, GPRS, PCS, 802.11X, ZigBee, Bluetooth, Wi-Fi, anysuitable wired network, combination thereof, and/or the like.

FIG. 2 is a block diagram that illustrates a node 200 according to someembodiments. Referring to FIGS. 1-2 , the node 200 is a non-limitingexample of any suitable one or more of nodes 110, 140, and nodes (ifany) between the node 140 and the origin server 150 in some embodiments.As shown, the node 200 includes one or more of a processing circuit 210,mass storage device 218, and network device 220.

The processing circuit 210 is configured to perform various functionsdescribed herein relative to the node 200. For example, the processingcircuit 210 of the edge node 110 (FIG. 1 ) may be configured toimplement one or more functions of CDN engine 120, e.g., the cachingmodule 124, and optionally also the business logic module 132. Theprocessing circuit 210 includes a processor 212 and a memory 214. Theprocessor 212 can be implemented with a general-purpose processor, anApplication Specific Integrated Circuit (ASIC), one or more FieldProgrammable Gate Arrays (FPGAs), a Digital Signal Processor (DSP), agroup of processing components, or other suitable electronic processingcomponents. Memory 214 may be or include primary storage device 126described with reference to FIG. 1 . The memory 214 can, for example, beimplemented with a Random Access Memory (RAM), Read-Only Memory (ROM),Non-Volatile RAM (NVRAM), flash memory, hard disk storage, or anothersuitable data storage unit. The memory 214 stores data and/or computercode for facilitating the various processes executed by the processor212. Moreover, the memory 214 is or includes tangible, non-transientvolatile memory or non-volatile memory. Accordingly, the memory 214includes database components, object code components, script components,or any other type of information structure for supporting the variousfunctions described herein. Mass storage device 218 may be or includesecondary storage device 128 described with reference to FIG. 1 . Themass storage device 218 can, for example, be implemented with a HDD orSSD.

The network interface 220 is structured to establish communication withclients (e.g., the clients 102 a-102 n), other nodes in the contentdelivery system 100, and/or the origin server 150. In some examples, thenetwork interface 220 is configured to establish the network 140 a. Thenetwork interface 220 includes hardware and software for achieving such.In some implementations, the network interface 220 includes a cellulartransceiver (configured for cellular standards), a local wirelessnetwork transceiver (for 802.11X, ZigBee, Bluetooth, Wi-Fi, or thelike), a wired network interface, a combination thereof (e.g., both acellular transceiver and a Bluetooth transceiver), and/or the like.

Any suitable one or more computers or processing circuits within contentdelivery system 100 or node 200, respectively described with referenceto FIGS. 1-2 , or any other suitable computer or processing circuit, maybe configured for use in a method for storing content items in secondarystorage devices, in a manner such as provided herein. For example, FIG.3 illustrates a flow of operations in an exemplary method 300 forstoring content items according to various configurations providedherein. Method 300 described with reference to FIG. 3 may be implementedby any suitable computer comprising a processor, a primary storagedevice, a secondary storage device, and a network interface. Asdescribed in greater detail above, the primary storage device mayreceive content items at a first rate, and the secondary storage devicemay receive content items at a second rate that is significantly lowerthan the first rate, which in previously known systems may causecomputational inefficiencies. As one example, the primary storage devicemay include a memory cache such as RAM, and the secondary storage devicemay include a mass storage device such as an HDD or SSD.

Referring to FIG. 3 , method 300 may include an operation of receiving,by the primary storage device via the network interface, a plurality ofcontent items responsive to respective requests from clients (operation302). For example, request service module 122 within edge node 110 ofcontent delivery system 100 illustrated in FIG. 1 may receive variousrequests from clients 102 a . . . 102 n for respective content itemsover time. An example of the request is an HTTP request. The request canbe received from the cloud and/or from the internet. Responsive to eachsuch client request, request service module 122 may send anauthentication request to business logic module 132 to authenticate theclient request, to which the business logic module 132 may respond byindicating whether the client request may be serviced. If the businesslogic module 132 indicates that the client request may be serviced,caching module 124 may determine whether the requested content item isalready stored in primary storage 126 or in secondary storage 128. Ifthe requested content item is not already stored in primary storage 126or secondary storage 128, then caching module 124 sends a contentrequest to an upstream node 140 or to origin server 150 for that contentitem. Responsive to that content request, primary storage 126 of cachingmodule 124 receives the content item via a network interface (e.g.,network device 220 described with reference to FIG. 2 ). If therequested content item is already stored in primary storage 126 or insecondary storage 128, then caching module 124 need not send such acontent request, and may transfer any appropriate content items fromsecondary storage 128 to primary storage 126 for distribution. In amanner such as known in the art and as described in greater detailbelow, caching module 124 may delete certain content items from primarystorage device 126 responsive to the respective requests from theclients. For example, the primary storage device may have a limitedcapacity for storing content items. Therefore in order to writeadditional content items into the primary storage device 126 responsiveto client requests, caching module 124 may selectively delete oldercontent items from the storage device in order to make room for newones. A variety of algorithms for managing content items within aprimary storage device, which may be known as “cache management”algorithms, are known in the art, although the present configurationsare not limited thereto.

Referring again to FIG. 3 , method 300 includes distributing, via thenetwork interface, the plurality of content items from the primarystorage device to clients responsive to the respective requests from theclients (operation 304). For example, responsive to respective requestsfrom clients 102 a . . . 102 n, request service module 122 transmitscontent items from primary storage 126 to such clients via a networkinterface (e.g., network device 220 described with reference to FIG. 2).

Referring again to FIG. 3 , method 300 includes generating, by theprocessor, a dynamic priority list for the content items based on therespective requests from the clients over time (operation 306). That is,at any given time the processor identifies which of the content itemsshould have the highest priority to be written to the secondary storagedevice, which of the content items should have the next highest priorityto be written to the secondary storage device, and so on. The prioritylist may be dynamic—that is, may change over time—responsive todifferent requests from the clients over time, in a manner such asdescribed below. Example criteria for generating the dynamic prioritylist are described in greater detail below. Method 300 illustrated inFIG. 3 also may include writing, by the processor based on the dynamicpriority list, only a subset of the content items to the secondarystorage device (operation 308). The remaining content items may remainin the primary storage device, for example until they are deleted in amanner such as described with reference to operation 302. Operations 306and 308 of method 300 may be implemented by any suitable processorcoupled to a primary storage device and a secondary storage device. Inone example, caching module 124 described with reference to FIG. 1 , orprocessing circuit 210 described with reference to FIG. 2 , may beconfigured so as to implement operations 306 and 308.

Note, however, that the processor implementing operations 306 and/or 308of method 300 may be, but need not necessarily be, the same processorimplementing operations 302 and/or 304. For example, a first processormay receive the respective requests from the clients (operation 302) andmay distribute the plurality of content items to the clients responsiveto such requests (operation 304). In some configurations, the firstprocessor may generate the dynamic priority list (306) or may write thesubset of the content items from the primary storage device to thesecondary storage device (operation 308). In other configurations, asecond processor may generate the dynamic priority list (306) or maywrite the subset of the content items from the primary storage device tothe secondary storage device (operation 308). The second processor maybe configured so as to manage the writing of the subset of content itemsonto the second storage device, while the first processor may beconfigured so as to manage the writing of the content items onto thefirst storage device. For example, the second processor may write thesubset of the content items from the network interface to the secondarystorage device, rather than writing the subset of content items from thefirst storage device to the second storage device.

In configurations such as described with reference to FIGS. 1-2 , it maybe useful for the processor to generate the dynamic priority list forthe content items based on the respective requests from the clients forthose content items over time, for example because the frequency ortiming of those requests may relate to the likelihood that such contentitems will be requested again. Illustratively, if only a single clientrequests a particular content item within a given period of time, thenit is unlikely that another client may request that content item duringa subsequent period of time. As such, it may be appropriate for theprocessor to place that content item low on the priority list forwriting to the secondary storage device so that additional computationalresources are not wasted on it. On the other hand, if multiple clientsrequest a particular content item over an extended period of time, thenit may be likely that still more clients may request that item during asubsequent period of time. As such, it may be appropriate for theprocessor to place that content item higher on the priority list forwriting to the secondary storage device so that it may be storedlocally, rather than expending additional computational resources inretrieving that content item again from an upstream node or an originserver. In another example, if multiple clients request a particularcontent item within a short amount of time but not thereafter, then itmay be unlikely that additional clients may request that item during asubsequent period of time. An example of such a content item may be alive broadcast, which may be of interest to many users during the timeperiod immediately after that broadcast, but not of much interestthereafter. As such, it may be appropriate for the processor to placethat content item low on the priority list for writing to the secondarystorage device so that additional computational resources are not wastedon it. In these and any other scenarios, the processor may periodicallyor continuously update the dynamic priority list based on respectiverequests from the clients for those content items over time, as theinterests of users may fluctuate over time.

The processor may be configured so as to generate the dynamic prioritylist based on any suitable criterion or combination of criteria. Forexample, in some configurations, the processor generates the dynamicpriority list based on frequencies at which the clients respectivelyrequest the content items. These frequencies may change over time.Illustratively, at a given time, the processor may be configured toplace higher on the dynamic priority list a content item which isrequested with the higher frequency at that time, than a content itemwhich is requested with a lower frequency at that time, and so on. Inanother example, in some configurations, the processor generates thedynamic priority list based on numbers of times with which the clientsrespectively request the content items. Illustratively, at a given time,the processor may be configured to place higher on the dynamic prioritylist a content item which has been requested a greater number of timesat that time, than a content item which is requested a lower number oftimes at that time, and so on.

In still another example, in some configurations, the processorgenerates the dynamic priority list based on changes in rates at whichthe clients respectively request the content items. Illustratively, at agiven time, the processor may be configured to place higher on thedynamic priority list a content item with the greatest increase in rateof client requests at that time, than a content item with a lowerincrease in rate of client requests at that time, and so on. However,certain types of content items like live broadcasts may be of interestto many users during and immediately following that broadcast, but notof much interest thereafter. Such content items may have a relativelylarge increase in the rate of client requests in a short amount of time,and from this increase in rate the processor may determine that it ismore appropriate to place that content item low on the priority list forwriting to the secondary storage device so that additional computationalresources are not wasted on it. As such, in some configurations theprocessor may be configured to place higher on the dynamic priority lista content item that has a lower increase in rate of client requests thana content item with a higher increase in rate of requests. Additionally,or alternatively, the processor may compare a content item's change inrate of client requests to a predetermined threshold (e.g., a thresholdindicative of a live broadcast), at that time, and place the contentitem higher or lower in the dynamic priority list based on thatcomparison. Similarly, the processor may place content items on thedynamic priority list based on their respective time of last request bya client, with more recently requested content items being ranked higherthan less recently requested content items.

In yet another example, the processor generates the dynamic prioritylist based on respective costs of receiving the content items via thenetwork interface. In this context, “costs” may refer to computationalcosts of respectively acquiring the content items from another computer,such as an origin server. A content item with a relatively lowcomputational cost may be one with a relatively small file size that maybe obtained from an origin server relatively quickly and with lowconsumption of network resources. A content item with a relatively highcomputational cost may have a relatively large file size that may betime-consuming to transfer from the origin server over the network. Ittherefore may save computational resources to write content items withhigher computational costs into the secondary storage so as to avoidhaving to expend computational resources on obtaining those contentitems again via the network at a later time. As such, the processor maybe configured to place higher on the dynamic priority list a contentitem with a higher cost of receiving it over the network interface atthat time, than a content item with a lower cost of receiving over thenetwork interface at that time.

In yet another example, the processor generates the dynamic prioritylist based on respective costs of writing the content items to theprimary storage device. In this context, “costs” may refer tocomputational costs of respectively writing the content items to theprimary storage device. A content item with a relatively lowcomputational cost may be one with a relatively small file size that maybe written relatively easily to the primary storage device. A contentitem with a relatively high computational cost may have a relativelylarge file size that may be time-consuming to write to the primarystorage device. It therefore may save computational resources to writecontent items with higher computational costs into the secondary storageso as to avoid having to expend computational resources on writing thosecontent items into the primary storage device at a later time. As such,the processor may be configured to place higher on the dynamic prioritylist a content item with a higher cost of writing it to the primarystorage device at that time, than a content item with a lower cost ofwriting to the primary storage device at that time.

In still another example, the processor generates the dynamic prioritylist based on respective costs of writing the content items to thesecondary storage device. In this context, “costs” may refer to theexpected degradation of the secondary storage device as a result ofwriting the content items to that device. A content item with arelatively low cost may be one which may be expected to be read multipletimes from the secondary storage device and/or may have a relativelysmall file size that may be written relatively easily to the secondarystorage device. A content item with a relatively high cost may be onewhich may expected to be infrequently or never read from the secondarystorage device and/or may have a relatively large file size that may betime-consuming to write to the secondary storage device. It thereforemay save computational resources to write content items with lower costsinto the secondary storage so as to avoid degrading the secondarystorage on account of writing those content items into the secondarystorage device. As such, the processor may be configured to place higheron the dynamic priority list a content item with a lower cost of writingit to the secondary storage device at that time, than a content itemwith a higher cost of writing to the secondary storage device at thattime.

The processor may be configured so as to use any suitable combination ofone or more of such criteria or other appropriate criteria or criterion.For example, in some configurations the processor may be configured togenerate the dynamic priority list based directly on the stream ofclient requests (e.g., rather than based on contents of the primarystorage), but may retrieve content items from the primary storage inpriority order based on the dynamic priority list. As noted elsewhereherein, content items may be deleted from the primary storage device,e.g., as part of cache management. As such, not all content items in thestream of client requests necessarily may be present in the primarystorage device. As another criterion, which optionally may be combinedwith other criteria such as described herein, the processor may beconfigured to determine whether content items in the request stream arerespectively stored in the primary storage device, and to place lower onthe dynamic priority list a content item which is not stored in theprimary storage device. That is, the processor may generate the dynamicpriority list based on whether the respective content items areavailable in the primary storage device.

The processor optionally may generate for each content item a“worthiness value” indicating the respective value to the computingsystem of writing that content item to the secondary storage device, asopposed to maintaining that content item only in the primary storagedevice from which it ultimately may be deleted as described above withreference to operation 302. The content item with the highest worthinessvalue may be highest on the dynamic priority list, and the processor maywrite content items to the secondary storage in descending order ofworthiness value, or may write content items to the secondary storagebased upon their worthiness values exceeding a predefined threshold.Purely by way of example, the processor may assign to each content itemstored in the primary storage device a worthiness value corresponding tothe number of times that a client respectively requests that contentitem, and thus may generate the dynamic priority list based on numbersof times with which the clients respectively request the content items.The worthiness value of each content item may, for example, beincremented each time that item is requested, or otherwise based on thepopularity of the content item. The processor may write content items tothe secondary storage in descending order of worthiness value, or basedupon their worthiness values exceeding a predefined threshold. Theworthiness value of a content item may be based on any suitablecriterion or combination of criteria, such as those provided herein(e.g., frequency of request, number of times of request, rate ofrequest, cost of receiving, cost of writing to primary storage, cost ofwriting to secondary storage).

It should be appreciated that configurations provided by the presentsubject matter are not limited to implementation in a content deliverysystem, and are not limited to management of content items. Instead, anysuitable data items may be written into any suitable memory device byany suitable processor. FIG. 4 is a flow diagram illustrating a methodfor storing data items in a mass storage device according to variousembodiments. Method 400 illustrated in FIG. 4 may be performed by asuitably programmed computer comprising a processor, a memory cache, anda mass storage device. Method 400 may include receiving the data itemsby the memory cache (operation 402). Examples of suitable memory cachesare provided elsewhere herein. The data items may include any suitabletypes of files or data, and are not limited to the examples of contentitems provided elsewhere herein. Method 400 may include generating, bythe processor, a respective worthiness value of each of the data items(operation 404). The worthiness values of data items may be generatedbased on any suitable criterion or combination of criteria, such asthose provided herein (e.g., frequency of request, number of times ofrequest, rate of request, cost of receiving, cost of writing to memorycache, cost of writing to the mass storage device). Method 400 mayinclude writing, by the processor, only a subset of the data items fromthe memory cache into the mass storage device based on the respectiveworthiness values (operation 406), e.g., in a manner similar to thatdescribed herein in which the processor writes a subset of content itemsfrom the primary storage device to the secondary storage device.

It should be appreciated that in configurations including business logicmodule 132, that module may be configured so as to observe and processevery request that clients make for respective content items, e.g., in amanner such as described herein. Caching module 122 optionally may beconfigured so as to inform business logic module 132 about the currentcache states of respective content items, and the business logic moduleoptionally may be configured to calculate a worthiness value of eachsuch content item and inform caching module 122 of that worthinessvalue, e.g., of the worthiness of committing that content item tosecondary storage.

The embodiments described herein have been described with reference todrawings. The drawings illustrate certain details of specificembodiments that implement the systems, methods and programs describedherein. However, describing the embodiments with drawings should not beconstrued as imposing on the disclosure any limitations that may bepresent in the drawings.

It should be understood that no claim element herein is to be construedunder the provisions of 35 U.S.C. § 112(f), unless the element isexpressly recited using the phrase “means for.”

As used herein, the term “circuit” may include hardware structured toexecute the functions described herein. In some embodiments, eachrespective “circuit” may include machine-readable media for configuringthe hardware to execute the functions described herein. The circuit maybe embodied as one or more circuitry components including, but notlimited to, processing circuitry, network interfaces, peripheraldevices, input devices, output devices, sensors, etc. In someembodiments, a circuit may take the form of one or more analog circuits,electronic circuits (e.g., integrated circuits (IC), discrete circuits,system on a chip (SOCs) circuits, etc.), telecommunication circuits,hybrid circuits, and any other type of “circuit.” In this regard, the“circuit” may include any type of component for accomplishing orfacilitating achievement of the operations described herein. Forexample, a circuit as described herein may include one or moretransistors, logic gates (e.g., NAND, AND, NOR, OR, XOR, NOT, XNOR,etc.), resistors, multiplexers, registers, capacitors, inductors,diodes, wiring, and so on).

The “circuit” may also include one or more processors communicativelycoupled to one or more memory or memory devices, such as one or moreprimary storage devices or secondary storage devices. In this regard,the one or more processors may execute instructions stored in the memoryor may execute instructions otherwise accessible to the one or moreprocessors. In some embodiments, the one or more processors may beembodied in various ways. The one or more processors may be constructedin a manner sufficient to perform at least the operations describedherein. In some embodiments, the one or more processors may be shared bymultiple circuits (e.g., circuit A and circuit B may comprise orotherwise share the same processor which, in some example embodiments,may execute instructions stored, or otherwise accessed, via differentareas of memory). Alternatively or additionally, the one or moreprocessors may be structured to perform or otherwise execute certainoperations independent of one or more co-processors. In other exampleembodiments, two or more processors may be coupled via a bus to enableindependent, parallel, pipelined, or multi-threaded instructionexecution. Each processor may be implemented as one or moregeneral-purpose processors, ASICs, FPGAs, DSPs, or other suitableelectronic data processing components structured to execute instructionsprovided by memory. The one or more processors may take the form of asingle core processor, multi-core processor (e.g., a dual coreprocessor, triple core processor, quad core processor, etc.),microprocessor, etc. In some embodiments, the one or more processors maybe external to the system, for example the one or more processors may bea remote processor (e.g., a cloud based processor). Alternatively oradditionally, the one or more processors may be internal and/or local tothe system. In this regard, a given circuit or components thereof may bedisposed locally (e.g., as part of a local server, a local computingsystem, etc.) or remotely (e.g., as part of a remote server such as acloud based server). To that end, a “circuit” as described herein mayinclude components that are distributed across one or more locations.

An exemplary system for implementing the overall system or portions ofthe embodiments might include a general purpose computer, specialpurpose computer, or special purpose processing machine including aprocessing unit, a system memory device, and a system bus that couplesvarious system components including the system memory device to theprocessing unit. The system memory may be or include the primary storagedevice and/or the secondary storage device. One or more of the systemmemory, primary storage device, and secondary storage device may includenon-transient volatile storage media, non-volatile storage media,non-transitory storage media (e.g., one or more volatile and/ornon-volatile memories), etc. In some embodiments, the non-volatile mediamay take the form of ROM, flash memory (e.g., flash memory such as NAND,3D NAND, NOR, 3D NOR, etc.), EEPROM, MRAM, magnetic storage, hard discs,optical discs, etc. In other embodiments, the volatile storage media maytake the form of RAM, TRAM, ZRAM, etc. Combinations of the above arealso included within the scope of machine-readable media. In thisregard, machine-executable instructions comprise, for example,instructions and data which cause a general purpose computer, specialpurpose computer, or special purpose processing machines to perform acertain function or group of functions. Each respective memory devicemay be operable to maintain or otherwise store information relating tothe operations performed by one or more associated circuits, includingprocessor instructions and related data (e.g., database components,object code components, script components, etc.), in accordance with theexample embodiments described herein.

It should also be noted that the term “input devices,” as describedherein, may include any type of input device including, but not limitedto, a keyboard, a keypad, a mouse, joystick or other input devicesperforming a similar function. Comparatively, the term “output device,”as described herein, may include any type of output device including,but not limited to, a computer monitor, printer, facsimile machine, orother output devices performing a similar function.

It should be noted that although the diagrams herein may show a specificorder and composition of method steps, it is understood that the orderof these steps may differ from what is depicted. For example, two ormore steps may be performed concurrently or with partial concurrence.Also, some method steps that are performed as discrete steps may becombined, steps being performed as a combined step may be separated intodiscrete steps, the sequence of certain processes may be reversed orotherwise varied, and the nature or number of discrete processes may bealtered or varied. The order or sequence of any element or apparatus maybe varied or substituted according to alternative embodiments.Accordingly, all such modifications are intended to be included withinthe scope of the present disclosure as defined in the appended claims.Such variations will depend on the machine-readable media and hardwaresystems chosen and on designer choice. It is understood that all suchvariations are within the scope of the disclosure. Likewise, softwareand web implementations of the present disclosure could be accomplishedwith standard programming techniques with rule based logic and otherlogic to accomplish the various database searching steps, correlationsteps, comparison steps and decision steps.

The foregoing description of embodiments has been presented for purposesof illustration and description. It is not intended to be exhaustive orto limit the disclosure to the precise form disclosed, and modificationsand variations are possible in light of the above teachings or may beacquired from this disclosure. The embodiments were chosen and describedin order to explain the principals of the disclosure and its practicalapplication to enable one skilled in the art to utilize the variousembodiments and with various modifications as are suited to theparticular use contemplated. Other substitutions, modifications, changesand omissions may be made in the design, operating conditions andembodiment of the embodiments without departing from the scope of thepresent disclosure as expressed in the appended claims.

What is claimed is:
 1. A method for storing content items, the methodbeing implemented by a computer comprising a processor, a primarystorage device, a secondary storage device, and a network interface, themethod comprising: receiving, by the primary storage device via thenetwork interface, a plurality of content items responsive to respectiverequests from clients; distributing, via the network interface, theplurality of content items from the primary storage device to clientsresponsive to the respective requests from the clients; generating, bythe processor, a worthiness value for each content item of the pluralityof content items, wherein the worthiness value is indicative of a valuefor writing the respective content item to the primary storage devicecompared to other content items of the plurality of content items, andthe worthiness value is based on a combination of at least frequency ofrequest, rate of request, and number of times of request for therespective content item; generating, by the processor, a dynamicpriority list for the content items based on the respective requestsfrom the clients over time and the generated worthiness values; writing,by the processor based on the dynamic priority list, only a subset ofthe content items to the secondary storage device.
 2. The method ofclaim 1, wherein the primary storage device comprises a memory cache,and wherein the secondary storage device comprises a mass storagedevice.
 3. The method of claim 1, wherein the primary storage devicereceives content items at a first rate, and wherein the secondarystorage device receives content items at a second rate that issignificantly lower than the first rate.
 4. The method of claim 1,further comprising, by the processor, deleting content items from theprimary storage device responsive to the respective requests from theclients.
 5. The method of claim 1, wherein the processor generates thedynamic priority list based on frequencies at which the clientsrespectively request the content items.
 6. The method of claim 1,wherein the processor generates the dynamic priority list based onnumbers of times with which the clients respectively request the contentitems.
 7. The method of claim 1, wherein the processor generates thedynamic priority list based on changes in rates at which the clientsrespectively request the content items.
 8. The method of claim 1,wherein the processor generates the dynamic priority list based onrespective costs of receiving the content items via the networkinterface.
 9. The method of claim 1, wherein the processor generates thedynamic priority list based on respective costs of writing the contentitems to the primary storage device.
 10. The method of claim 1, whereinthe processor generates the dynamic priority list based on respectivecosts of writing the content items to the secondary storage device. 11.The method of claim 1, wherein the computer comprises a node of acontent delivery network.
 12. The method of claim 1, wherein theprocessor receives the respective requests from the clients anddistributes the plurality of content items to the clients responsive tosuch requests.
 13. The method of claim 1, wherein the processor writesthe subset of the content items from the primary storage device to thesecondary storage device.
 14. The method of claim 1, wherein theprocessor writes the subset of the content items from the networkinterface to the secondary storage device.
 15. The method of claim 14,wherein the processor generates the dynamic priority list based onwhether the respective content items are available in the primarystorage device.
 16. A method for storing data items by a computercomprising a processor, a memory cache, and a mass storage device, themethod comprising: receiving the data items by the memory cache;generating, by the processor, a respective worthiness value of each ofthe data items; and writing, by the processor, only a subset of the dataitems from the memory cache into the mass storage device based on therespective worthiness values.
 17. A computer system comprising aprocessor, a primary storage device, a secondary storage device, and anetwork interface, the processor being configured to implementoperations comprising: receiving, by the primary storage device via thenetwork interface, a plurality of content items responsive to respectiverequests from clients; distributing, via the network interface, theplurality of content items from the primary storage device to clientsresponsive to the respective requests from the clients; generating, bythe processor, a worthiness value for each content item of the pluralityof content items, wherein the worthiness value is indicative of a valuefor writing the respective content item to the primary storage devicecompared to other content items of the plurality of content items, andthe worthiness value is based on a combination of at least frequency ofrequest, rate of request, and number of times of request for therespective content item; generating, by the processor, a dynamicpriority list for the content items based on the respective requestsfrom the clients over time and the generated worthiness values; writing,by the processor based on the dynamic priority list, only a subset ofthe content items to the secondary storage device.